home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple WWDC 1996
/
WWDC96_1996 (CD).toast
/
Technology Materials
/
MacOS 8 Resources
/
Developer Tools
/
Mac OS 8 Interfaces & Libraries
/
Interfaces
/
CIncludes
/
Memory.h
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-01
|
20KB
|
790 lines
/*
File: Memory.h
Contains: Memory Manager Interfaces.
Version: Technology: System 7.5
Release: Universal Interfaces 3.0d3 on Copland DR1
Copyright: © 1984-1996 by Apple Computer, Inc. All rights reserved.
Bugs?: If you find a problem with this file, send the file and version
information (from above) and the problem description to:
Internet: apple.bugs@applelink.apple.com
AppleLink: APPLE.BUGS
*/
/*
NOTE
Don't change GetHandleSize and GetPtrSize into inlines. They are documented as returning
0 in case of an error in Inside Mac, but the traps actually return an error code in D0.
The glue sets D0 to 0 if an error occured.
*/
#ifndef __MEMORY__
#define __MEMORY__
#ifndef __TYPES__
#include <Types.h>
#endif
#ifndef __MIXEDMODE__
#include <MixedMode.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if PRAGMA_IMPORT_SUPPORTED
#pragma import on
#endif
#if PRAGMA_ALIGN_SUPPORTED
#pragma options align=mac68k
#endif
enum {
maxSize = 0x00800000, /*Max data block size is 8 megabytes*/
defaultPhysicalEntryCount = 8, /* values returned from the GetPageState function */
kPageInMemory = 0,
kPageOnDisk = 1,
kNotPaged = 2
};
enum {
/* masks for Zone->heapType field */
k32BitHeap = 1, /* valid in all Memory Managers */
kNewStyleHeap = 2, /* true if new Heap Manager is present */
kNewDebugHeap = 4 /* true if new Heap Manager is running in debug mode on this heap */
};
/* size of a block in bytes */
typedef long Size;
#if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
typedef pascal long (*GrowZoneProcPtr)(Size cbNeeded);
typedef pascal void (*PurgeProcPtr)(Handle blockToPurge);
/*
This ProcPtr uses register based parameters on the 68k and cannot
be written in or called from a high-level language without the help of
mixed mode or assembly glue.
typedef pascal void (*UserFnProcPtr)(void *parameter);
*/
#if GENERATINGCFM
typedef UniversalProcPtr GrowZoneUPP;
typedef UniversalProcPtr PurgeUPP;
typedef UniversalProcPtr UserFnUPP;
#else
typedef GrowZoneProcPtr GrowZoneUPP;
typedef PurgeProcPtr PurgeUPP;
typedef Register68kProcPtr UserFnUPP;
#endif
struct Zone {
Ptr bkLim;
Ptr purgePtr;
Ptr hFstFree;
long zcbFree;
GrowZoneUPP gzProc;
short moreMast;
short flags;
short cntRel;
short maxRel;
short cntNRel;
SInt8 heapType; /* previously "maxNRel", now holds flags (e.g. k32BitHeap)*/
SInt8 unused;
short cntEmpty;
short cntHandles;
long minCBFree;
PurgeUPP purgeProc;
Ptr sparePtr;
Ptr allocPtr;
short heapData;
};
typedef struct Zone Zone;
typedef Zone *THz;
struct MemoryBlock {
void * address;
unsigned long count;
};
typedef struct MemoryBlock MemoryBlock;
struct LogicalToPhysicalTable {
MemoryBlock logical;
MemoryBlock physical[8];
};
typedef struct LogicalToPhysicalTable LogicalToPhysicalTable;
typedef short PageState;
typedef short StatusRegisterContents;
enum {
uppGrowZoneProcInfo = kPascalStackBased
| RESULT_SIZE(SIZE_CODE(sizeof(long)))
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Size))),
uppPurgeProcInfo = kPascalStackBased
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Handle))),
uppUserFnProcInfo = kRegisterBased
| REGISTER_ROUTINE_PARAMETER(1, kRegisterA0, SIZE_CODE(sizeof(void *)))
};
#if GENERATINGCFM
#define NewGrowZoneProc(userRoutine) \
(GrowZoneUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppGrowZoneProcInfo, GetCurrentArchitecture())
#define NewPurgeProc(userRoutine) \
(PurgeUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppPurgeProcInfo, GetCurrentArchitecture())
#define NewUserFnProc(userRoutine) \
(UserFnUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUserFnProcInfo, GetCurrentArchitecture())
#else
#define NewGrowZoneProc(userRoutine) \
((GrowZoneUPP) (userRoutine))
#define NewPurgeProc(userRoutine) \
((PurgeUPP) (userRoutine))
#define NewUserFnProc(userRoutine) \
((UserFnUPP) (userRoutine))
#endif
#if GENERATINGCFM
#define CallGrowZoneProc(userRoutine, cbNeeded) \
CallUniversalProc((UniversalProcPtr)(userRoutine), uppGrowZoneProcInfo, (cbNeeded))
#define CallPurgeProc(userRoutine, blockToPurge) \
CallUniversalProc((UniversalProcPtr)(userRoutine), uppPurgeProcInfo, (blockToPurge))
#define CallUserFnProc(userRoutine, parameter) \
CallUniversalProc((UniversalProcPtr)(userRoutine), uppUserFnProcInfo, (parameter))
#else
#define CallGrowZoneProc(userRoutine, cbNeeded) \
(*(userRoutine))((cbNeeded))
#define CallPurgeProc(userRoutine, blockToPurge) \
(*(userRoutine))((blockToPurge))
/* (*UserFnUPP) cannot be called from a high-level language without the Mixed Mode Manager */
#endif
extern pascal Ptr GetApplLimit(void)
TWOWORDINLINE(0x2EB8, 0x0130);
extern pascal THz SystemZone(void)
TWOWORDINLINE(0x2EB8, 0x02A6);
extern pascal THz ApplicationZone(void)
TWOWORDINLINE(0x2EB8, 0x02AA);
extern pascal Handle GZSaveHnd(void)
TWOWORDINLINE(0x2EB8, 0x0328);
extern pascal Ptr TopMem(void)
TWOWORDINLINE(0x2EB8, 0x0108);
extern pascal OSErr MemError(void)
TWOWORDINLINE(0x3EB8, 0x0220);
#endif
#if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 GetZone
#endif
extern pascal THz GetZone(void )
ONEWORDINLINE(0xA11A);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewHandle(__D0)
#endif
extern pascal Handle NewHandle(Size byteCount)
ONEWORDINLINE(0xA122);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewHandleSys(__D0)
#endif
extern pascal Handle NewHandleSys(Size byteCount)
ONEWORDINLINE(0xA522);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewHandleClear(__D0)
#endif
extern pascal Handle NewHandleClear(Size byteCount)
ONEWORDINLINE(0xA322);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewHandleSysClear(__D0)
#endif
extern pascal Handle NewHandleSysClear(Size byteCount)
ONEWORDINLINE(0xA722);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 HandleZone(__A0)
#endif
extern pascal THz HandleZone(Handle h)
ONEWORDINLINE(0xA126);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 RecoverHandle(__A0)
#endif
extern pascal Handle RecoverHandle(Ptr p)
ONEWORDINLINE(0xA128);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 RecoverHandleSys(__A0)
#endif
extern pascal Handle RecoverHandleSys(Ptr p)
ONEWORDINLINE(0xA528);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewPtr(__D0)
#endif
extern pascal Ptr NewPtr(Size byteCount)
ONEWORDINLINE(0xA11E);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewPtrSys(__D0)
#endif
extern pascal Ptr NewPtrSys(Size byteCount)
ONEWORDINLINE(0xA51E);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewPtrClear(__D0)
#endif
extern pascal Ptr NewPtrClear(Size byteCount)
ONEWORDINLINE(0xA31E);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewPtrSysClear(__D0)
#endif
extern pascal Ptr NewPtrSysClear(Size byteCount)
ONEWORDINLINE(0xA71E);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 PtrZone(__A0)
#endif
extern pascal THz PtrZone(Ptr p)
ONEWORDINLINE(0xA148);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 MaxBlock
#endif
extern pascal long MaxBlock(void )
ONEWORDINLINE(0xA061);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 MaxBlockSys
#endif
extern pascal long MaxBlockSys(void )
ONEWORDINLINE(0xA461);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 StackSpace
#endif
extern pascal long StackSpace(void )
ONEWORDINLINE(0xA065);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewEmptyHandle
#endif
extern pascal Handle NewEmptyHandle(void )
ONEWORDINLINE(0xA166);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __A0 NewEmptyHandleSys
#endif
extern pascal Handle NewEmptyHandleSys(void )
ONEWORDINLINE(0xA566);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter HLock(__A0)
#endif
extern pascal void HLock(Handle h)
ONEWORDINLINE(0xA029);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter HUnlock(__A0)
#endif
extern pascal void HUnlock(Handle h)
ONEWORDINLINE(0xA02A);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter HPurge(__A0)
#endif
extern pascal void HPurge(Handle h)
ONEWORDINLINE(0xA049);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter HNoPurge(__A0)
#endif
extern pascal void HNoPurge(Handle h)
ONEWORDINLINE(0xA04A);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter HLockHi(__A0)
#endif
extern pascal void HLockHi(Handle h)
TWOWORDINLINE(0xA064, 0xA029);
extern pascal Handle TempNewHandle(Size logicalSize, OSErr *resultCode)
THREEWORDINLINE(0x3F3C, 0x001D, 0xA88F);
extern pascal Size TempMaxMem(Size *grow)
THREEWORDINLINE(0x3F3C, 0x0015, 0xA88F);
extern pascal long TempFreeMem(void )
THREEWORDINLINE(0x3F3C, 0x0018, 0xA88F);
extern pascal void InitZone(GrowZoneUPP pgrowZone, short cmoreMasters, void *limitPtr, void *startPtr);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter SetZone(__A0)
#endif
extern pascal void SetZone(THz hz)
ONEWORDINLINE(0xA01B);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 CompactMem(__D0)
#endif
extern pascal Size CompactMem(Size cbNeeded)
ONEWORDINLINE(0xA04C);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 CompactMemSys(__D0)
#endif
extern pascal Size CompactMemSys(Size cbNeeded)
ONEWORDINLINE(0xA44C);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter PurgeMem(__D0)
#endif
extern pascal void PurgeMem(Size cbNeeded)
ONEWORDINLINE(0xA04D);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter PurgeMemSys(__D0)
#endif
extern pascal void PurgeMemSys(Size cbNeeded)
ONEWORDINLINE(0xA44D);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 FreeMem
#endif
extern pascal long FreeMem(void )
ONEWORDINLINE(0xA01C);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 FreeMemSys
#endif
extern pascal long FreeMemSys(void )
ONEWORDINLINE(0xA41C);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter ReserveMem(__D0)
#endif
extern pascal void ReserveMem(Size cbNeeded)
ONEWORDINLINE(0xA040);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter ReserveMemSys(__D0)
#endif
extern pascal void ReserveMemSys(Size cbNeeded)
ONEWORDINLINE(0xA440);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 MaxMem(__A1)
#endif
extern pascal Size MaxMem(Size *grow)
TWOWORDINLINE(0xA11D, 0x2288);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 MaxMemSys(__A1)
#endif
extern pascal Size MaxMemSys(Size *grow)
TWOWORDINLINE(0xA51D, 0x2288);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter SetGrowZone(__A0)
#endif
extern pascal void SetGrowZone(GrowZoneUPP growZone)
ONEWORDINLINE(0xA04B);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter MoveHHi(__A0)
#endif
extern pascal void MoveHHi(Handle h)
ONEWORDINLINE(0xA064);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter DisposePtr(__A0)
#endif
extern pascal void DisposePtr(Ptr p)
ONEWORDINLINE(0xA01F);
extern pascal Size GetPtrSize(Ptr p);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter SetPtrSize(__A0, __D0)
#endif
extern pascal void SetPtrSize(Ptr p, Size newSize)
ONEWORDINLINE(0xA020);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter DisposeHandle(__A0)
#endif
extern pascal void DisposeHandle(Handle h)
ONEWORDINLINE(0xA023);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter SetHandleSize(__A0, __D0)
#endif
extern pascal void SetHandleSize(Handle h, Size newSize)
ONEWORDINLINE(0xA024);
extern pascal Size GetHandleSize(Handle h);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 InlineGetHandleSize(__A0)
#endif
extern pascal Size InlineGetHandleSize(Handle h)
ONEWORDINLINE(0xA025);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter ReallocateHandle(__A0, __D0)
#endif
extern pascal void ReallocateHandle(Handle h, Size byteCount)
ONEWORDINLINE(0xA027);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter ReallocateHandleSys(__A0, __D0)
#endif
extern pascal void ReallocateHandleSys(Handle h, Size byteCount)
ONEWORDINLINE(0xA427);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter EmptyHandle(__A0)
#endif
extern pascal void EmptyHandle(Handle h)
ONEWORDINLINE(0xA02B);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter HSetRBit(__A0)
#endif
extern pascal void HSetRBit(Handle h)
ONEWORDINLINE(0xA067);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter HClrRBit(__A0)
#endif
extern pascal void HClrRBit(Handle h)
ONEWORDINLINE(0xA068);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 HGetState(__A0)
#endif
extern pascal SInt8 HGetState(Handle h)
ONEWORDINLINE(0xA069);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter HSetState(__A0, __D0)
#endif
extern pascal void HSetState(Handle h, SInt8 flags)
ONEWORDINLINE(0xA06A);
extern pascal void PurgeSpace(long *total, long *contig);
#endif
#if FOR_SYSTEM7_ONLY
/* These are defined in Kernel for System 8 */
#if GENERATING68K && !GENERATINGCFM
#pragma parameter BlockMove(__A0, __A1, __D0)
#endif
extern pascal void BlockMove(const void *srcPtr, void *destPtr, Size byteCount)
ONEWORDINLINE(0xA02E);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter BlockMoveData(__A0, __A1, __D0)
#endif
extern pascal void BlockMoveData(const void *srcPtr, void *destPtr, Size byteCount)
ONEWORDINLINE(0xA22E);
extern void BlockMoveUncached(const void *srcPtr, void *destPtr, Size byteCount);
extern void BlockMoveDataUncached(const void *srcPtr, void *destPtr, Size byteCount);
extern void BlockZero(void *destPtr, Size byteCount);
extern void BlockZeroUncached(void *destPtr, Size byteCount);
#endif
#if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
extern pascal void MaxApplZone(void )
ONEWORDINLINE(0xA063);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter SetApplBase(__A0)
#endif
extern pascal void SetApplBase(void *startPtr)
ONEWORDINLINE(0xA057);
extern pascal void MoreMasters(void )
ONEWORDINLINE(0xA036);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter SetApplLimit(__A0)
#endif
extern pascal void SetApplLimit(void *zoneLimit)
ONEWORDINLINE(0xA02D);
#endif
#if FOR_SYSTEM7_ONLY
extern pascal void InitApplZone(void )
ONEWORDINLINE(0xA02C);
#endif
#if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
/* Temporary Memory routines renamed, but obsolete, in System 7.0 and later. */
extern pascal void TempHLock(Handle h, OSErr *resultCode)
THREEWORDINLINE(0x3F3C, 0x001E, 0xA88F);
extern pascal void TempHUnlock(Handle h, OSErr *resultCode)
THREEWORDINLINE(0x3F3C, 0x001F, 0xA88F);
extern pascal void TempDisposeHandle(Handle h, OSErr *resultCode)
THREEWORDINLINE(0x3F3C, 0x0020, 0xA88F);
extern pascal Ptr TempTopMem(void )
THREEWORDINLINE(0x3F3C, 0x0016, 0xA88F);
#endif
#if FOR_SYSTEM7_ONLY
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 HoldMemory(__A0, __A1)
#endif
extern pascal OSErr HoldMemory(void *address, unsigned long count)
TWOWORDINLINE(0x7000, 0xA05C);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 UnholdMemory(__A0, __A1)
#endif
extern pascal OSErr UnholdMemory(void *address, unsigned long count)
TWOWORDINLINE(0x7001, 0xA05C);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 LockMemory(__A0, __A1)
#endif
extern pascal OSErr LockMemory(void *address, unsigned long count)
TWOWORDINLINE(0x7002, 0xA05C);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 LockMemoryContiguous(__A0, __A1)
#endif
extern pascal OSErr LockMemoryContiguous(void *address, unsigned long count)
TWOWORDINLINE(0x7004, 0xA05C);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 UnlockMemory(__A0, __A1)
#endif
extern pascal OSErr UnlockMemory(void *address, unsigned long count)
TWOWORDINLINE(0x7003, 0xA05C);
extern pascal OSErr GetPhysical(LogicalToPhysicalTable *addresses, unsigned long *physicalEntryCount);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 DeferUserFn(__A0, __D0)
#endif
extern pascal OSErr DeferUserFn(UserFnUPP userFunction, void *argument)
ONEWORDINLINE(0xA08F);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 DebuggerGetMax
#endif
extern pascal long DebuggerGetMax(void )
TWOWORDINLINE(0x7000, 0xA08D);
extern pascal void DebuggerEnter(void )
TWOWORDINLINE(0x7001, 0xA08D);
extern pascal void DebuggerExit(void )
TWOWORDINLINE(0x7002, 0xA08D);
extern pascal void DebuggerPoll(void )
TWOWORDINLINE(0x7003, 0xA08D);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 GetPageState(__A0)
#endif
extern pascal PageState GetPageState(const void *address)
TWOWORDINLINE(0x7004, 0xA08D);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 PageFaultFatal
#endif
extern pascal Boolean PageFaultFatal(void )
TWOWORDINLINE(0x7005, 0xA08D);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 DebuggerLockMemory(__A0, __A1)
#endif
extern pascal OSErr DebuggerLockMemory(void *address, unsigned long count)
TWOWORDINLINE(0x7006, 0xA08D);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 DebuggerUnlockMemory(__A0, __A1)
#endif
extern pascal OSErr DebuggerUnlockMemory(void *address, unsigned long count)
TWOWORDINLINE(0x7007, 0xA08D);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 EnterSupervisorMode
#endif
extern pascal StatusRegisterContents EnterSupervisorMode(void )
TWOWORDINLINE(0x7008, 0xA08D);
#endif
/*
StripAddress and Translate24To32 macro to nothing on PowerPC
StripAddress is implemented as a trap in System 6 or later
*/
#if !GENERATINGPOWERPC
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 StripAddress(__D0)
#endif
extern pascal Ptr StripAddress(void *theAddress)
ONEWORDINLINE(0xA055);
#else
#define StripAddress(x) ((Ptr)(x))
#endif
#if !GENERATINGPOWERPC
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 Translate24To32(__D0)
#endif
extern pascal Ptr Translate24To32(void *addr24)
ONEWORDINLINE(0xA091);
#else
#define Translate24To32(x) ((Ptr)(x))
#endif
#if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
extern pascal OSErr HandToHand(Handle *theHndl);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 PtrToXHand(__A0, __A1, __D0)
#endif
extern pascal OSErr PtrToXHand(const void *srcPtr, Handle dstHndl, long size)
ONEWORDINLINE(0xA9E2);
extern pascal OSErr PtrToHand(const void *srcPtr, Handle *dstHndl, long size);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 HandAndHand(__A0, __A1)
#endif
extern pascal OSErr HandAndHand(Handle hand1, Handle hand2)
ONEWORDINLINE(0xA9E4);
#if GENERATING68K && !GENERATINGCFM
#pragma parameter __D0 PtrAndHand(__A0, __A1, __D0)
#endif
extern pascal OSErr PtrAndHand(const void *ptr1, Handle hand2, long size)
ONEWORDINLINE(0xA9EF);
#endif
#if OLDROUTINENAMES
#if FOR_SYSTEM7_ONLY
#endif
#if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
#define ApplicZone() ApplicationZone()
#define MFTempNewHandle(logicalSize, resultCode) TempNewHandle(logicalSize, resultCode)
#define MFMaxMem(grow) TempMaxMem(grow)
#define MFFreeMem() TempFreeMem()
#define MFTempHLock(h, resultCode) TempHLock(h, resultCode)
#define MFTempHUnlock(h, resultCode) TempHUnlock(h, resultCode)
#define MFTempDisposHandle(h, resultCode) TempDisposeHandle(h, resultCode)
#define MFTopMem() TempTopMem()
#define ResrvMem(cbNeeded) ReserveMem(cbNeeded)
#define DisposPtr(p) DisposePtr(p)
#define DisposHandle(h) DisposeHandle(h)
#define ReallocHandle(h, byteCount) ReallocateHandle(h, byteCount)
#endif
#endif
#if PRAGMA_ALIGN_SUPPORTED
#pragma options align=reset
#endif
#if PRAGMA_IMPORT_SUPPORTED
#pragma import off
#endif
#ifdef __cplusplus
}
#endif
#endif /* __MEMORY__ */